"""
python-Keras MCP Server

面向软件：python-Keras（深度学习框架）

MCP tools 列表：
1. keras_version - 检查 Keras 版本信息
   参数：无
   返回：包含版本信息的统一 JSON 结构

2. keras_import_test - 测试 Keras 模块能否正常导入
   参数：无  
   返回：包含导入测试结果的统一 JSON 结构

3. keras_basic_model - 创建一个简单的 Keras 模型进行基本功能测试
   参数：无
   返回：包含模型创建测试结果的统一 JSON 结构

所有工具返回的统一 JSON 结构：
{
  "success": bool,      # 命令执行是否成功
  "command": str,       # 执行的完整命令
  "exit_code": int,     # 命令退出码
  "stdout": str,        # 标准输出内容
  "stderr": str         # 标准错误内容
}
"""

from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json

mcp = FastMCP("python-Keras MCP Server")

@mcp.tool()
def keras_version() -> dict:
    """
    检查 Keras 版本信息
    
    返回：
        dict: 包含版本检查结果的统一 JSON 结构
    """
    command = ["python3", "-c", "import keras; print(keras.__version__)"]
    
    try:
        result = subprocess.run(
            command,
            capture_output=True,
            text=True,
            timeout=30
        )
        
        return {
            "success": result.returncode == 0,
            "command": " ".join(command),
            "exit_code": result.returncode,
            "stdout": result.stdout.strip(),
            "stderr": result.stderr.strip()
        }
    except Exception as e:
        return {
            "success": False,
            "command": " ".join(command),
            "exit_code": -1,
            "stdout": "",
            "stderr": f"命令执行异常: {str(e)}"
        }

@mcp.tool()
def keras_import_test() -> dict:
    """
    测试 Keras 模块能否正常导入
    
    返回：
        dict: 包含导入测试结果的统一 JSON 结构
    """
    command = ["python3", "-c", "import keras; print('Keras import successful')"]
    
    try:
        result = subprocess.run(
            command,
            capture_output=True,
            text=True,
            timeout=30
        )
        
        return {
            "success": result.returncode == 0,
            "command": " ".join(command),
            "exit_code": result.returncode,
            "stdout": result.stdout.strip(),
            "stderr": result.stderr.strip()
        }
    except Exception as e:
        return {
            "success": False,
            "command": " ".join(command),
            "exit_code": -1,
            "stdout": "",
            "stderr": f"命令执行异常: {str(e)}"
        }

@mcp.tool()
def keras_basic_model() -> dict:
    """
    创建一个简单的 Keras 模型进行基本功能测试
    
    返回：
        dict: 包含模型创建测试结果的统一 JSON 结构
    """
    python_code = '''
import keras
from keras import layers

# 创建一个简单的序列模型
model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

print("Keras basic model created and compiled successfully")
print(f"Model summary: {model.summary()}")
'''
    
    command = ["python3", "-c", python_code]
    
    try:
        result = subprocess.run(
            command,
            capture_output=True,
            text=True,
            timeout=60
        )
        
        return {
            "success": result.returncode == 0,
            "command": " ".join(command),
            "exit_code": result.returncode,
            "stdout": result.stdout.strip(),
            "stderr": result.stderr.strip()
        }
    except Exception as e:
        return {
            "success": False,
            "command": " ".join(command),
            "exit_code": -1,
            "stdout": "",
            "stderr": f"命令执行异常: {str(e)}"
        }

if __name__ == "__main__":
    mcp.run()